#include "nodobucle.h"
#include "nodoexpresion.h"
#include "nodocompuesto.h"

#define NUMERO_MAXIMO_ITERACIONES 20

NodoBucle::NodoBucle(NodoExpresion* expresion, NodoCompuesto* nodoCuerpo)
{
    this->expresion = expresion;
    this->nodoCuerpo = nodoCuerpo;

}

NodoBucle::~NodoBucle()
{

}

void NodoBucle::generarElementos(FragmentoImpresion* fragmento)
{    
    if (expresion == NULL) {
        return;
    }

    int i = 0;
    bool cumpleCondicion;
    do {
        Valor resultado = expresion->evaluar();
        cumpleCondicion = resultado.toBool();
        if (cumpleCondicion) {
            nodoCuerpo->generarElementos(fragmento);
        } 
        if (i++ >= NUMERO_MAXIMO_ITERACIONES) {
            break;
        }
    } while (cumpleCondicion);
}